Curso de ScriptVox Intermedirio - Aula 1 - Prof. Oswaldo Vernet - iNCE/UFRJ

Sejam bem vindos ao Curso Intermedirio de ScriptVox.

Antes propriamente de iniciarmos o texto da primeira aula, vamos combinar algumas
regras para o andamento do curso.

Como o interpretador est ainda em fase de teste, correes podero ser feitas durante o curso 
e  importante que voc utilize sempre a verso mais recente. Confira diariamente no site 

http://intervox.nce.ufrj.br/scriptvox

se est disponvel uma nova verso. A data e a hora da ltima modificao aparecem 
imediatamente antes do link 

Clique aqui para baixar o programa sc.exe

O nome "sc.exe"  ainda provisrio. Quando finalmente homologada a verso estvel, 
o interpretador voltar a se chamar "scripvox.exe", para felicidade de todos. 

Todos os alunos sero convidados a se inscrever no grupo scriptvox@googlegroups.com.
 importante sua participao neste grupo, onde voc poder discutir com os colegas as
suas dvidas, postar solues, sugerir melhorias, etc.

A comunicao com o professor ser pelo endereo eletrnico scriptvox@gmail.com, tanto
para entrega dos exerccios quanto para esclarecer dvidas. 

Os textos das aulas sero disponibilizados at o meio-dia de segundas e quintas feiras,
exceto nos dias 16 e 20 de fevereiro, prximos ao Carnaval. Estimamos o final do curso 
para meados do ms de maro, quando haver a avaliao final.

Cada aula consistir de um texto expositivo e de exerccios, divididos em trs categorias:
- perguntas de estudo dirigido, com a finalidade de fixar conceitos;
- exerccios de programao em geral, que se destinam  prtica dos conceitos;
- exerccios de avaliao, que devero ser remetidos para scriptvox@gmail.com.

Os exerccios de avaliao propostos nas aulas de segunda-feira devem ser remetidos para
o endereo eletrnico scriptvox@gmail.com at meio-dia da quinta-feira seguinte. J os
exerccios de avaliao propostos nas aulas de quinta-feira devem ser remetidos at
meio-dia da segunda-feira seguinte. Estes exerccios contaro para sua avaliao final
no curso.

 fundamental para seu aprimoramento a resoluo dos exerccios, mesmo os que lhe paream
absolutamente suprfluos, como poder ocorrer com algumas perguntas de estudo dirigido.
Se os conceitos no forem corretamente fixados, de pouco adiantar pratic-los e voc
perceber que seu nvel de programao no ir melhorar.

Em alguns pontos do texto so feitas perguntas e  importante procurar respond-las
antes de continuar a leitura.

Vamos, ento,  primeira aula, cujo objetivo  apontar algumas diferenas
entre a verso 6.0 do interpretador ScriptVox e as verses anteriores,
em virtude da reviso que a linguagem sofreu recentemente. Tambm falaremos de
atribuies, tipos e expresses.


1) INTERFACE

A partir da verso 6.0, a extenso padro para nomes de arquivos contendo
scripts  ".PRO", em vez do antigo ".CMD", que j era usada pelo Windows 2000 
com outro significado.

Temporariamente, ambas as extenses esto sendo aceitas, mas recomendamos 
aos usurios que nomeiem seus scripts com a terminao ".PRO",
pois iremos, em breve, descontinuar a extenso antiga.


2) ASPECTOS LXICOS

2.1) Comentrios

Alm de reconhecer as linhas iniciadas por asterisco como linhas de
comentrios, o ScriptVox verso 6.0 permite comentrios em
qualquer ponto do script. Eles devem ser iniciados por um ponto e
vrgula ou por um par de barras, assim:

* Esta  uma linha tradicional de comentrio
Seja a 3          ; atribui 3  varivel a
Subtrai a 1       // subtrai 1 da varivel a

Um comentrio iniciado por ponto e vrgula ou por um par de barras
estende-se at o final da linha e, assim como os comentrios iniciados por asterisco, 
eles so ignorados pelo interpretador.

2.2) Nomes de variveis

Nas verses anteriores do interpretador ScriptVox, havia uma distino
entre variveis rpidas (aquelas cujos nomes consistiam em apenas uma
letra) e variveis lentas (aquelas cujos nomes se iniciavam com o caractere
cifro).

Na verso 6.0, esta distino acabou. Sendo assim, h uma nica regra
para a formao de nomes de variveis:

O nome de uma varivel deve comear ou por um cifro, ou por um sublinhado ("underscore"
em ingls) ou por uma letra. Este caractere inicial pode ser seguido de cifres, 
sublinhados, letras ou nmeros.

No existe limite para o nmero de caracteres que compem um nome de varivel.

Se voc gosta de comear os nomes de suas variveis pelo caractere cifro,
no h problema, pode continuar a faz-lo. Mas atente apenas para o seguinte
detalhe: $var e var so consideradas variveis distintas em um script.

Um outro ponto importante  que, internamente, os nomes de variveis so 
convertidos para maisculas e os acentos, o trema, o til e a cedilha so suprimidos.
Assim, 

ao
AO
acao
aao

referem-se todos  mesma varivel.


2.3) Rtulos

Rtulos associam nomes a certas linhas importantes do script, s quais precisamos 
nos referir em outros pontos do cdigo, como, por exemplo, em comandos DESVIA ou CHAMA.

Os nomes de rtulos continuam sendo iniciados pelo caractere arroba,
que pode ser seguido de letras, dgitos, cifres ou sublinhados. Entretanto,
um rtulo sofre a mesma transformao interna na hora de ser processado pelo
interpretador: seu nome  convertido para maisculas, eliminando-se os acentos,
o til, o trema e a cedilha.

Assim, @rtulo e @ROTULO identificam o mesmo rtulo no programa.

O interpretador emite uma mensagem de erro quando encontra um mesmo rtulo 
sendo associado a mais de uma linha do script.

Todo rtulo deve aparecer sozinho na linha onde  definido, exatamente como
nas verses precedentes.


2.4) Comandos

Os nomes dos comandos, por coerncia, seguem a mesma regra para os nomes de
variveis e rtulos: so internamente convertidos para maisculas sem acentos,
trema, til ou cedilha.

Assim, "Le", "le", "l" ou "l" so considerados sinnimos.

Nomes de comandos no podem ser usados como nomes de variveis.


3) ASPECTOS SINTTICOS

3.1) Aninhamento de Comandos

Alguns comandos do ScriptVox, como o REPETE, o ENQUANTO e o SE, causam um
agrupamento das linhas, que comea na linha seguinte  do comando e termina 
na linha anterior quela onde aparece o comando Fim correspondente.
Lembre-se que este comando Fim deve ser seguido do nome do comando que est
sendo terminado.

A este agrupamento de linhas compreendidas entre um comando e sua finalizao
denominamos um BLOCO.

Assim, se tivermos o seguinte comando REPETE:

repete n 5
    escreve "O valor de n  "&
    escreve n
fim repete

o bloco correspondente a este comando Repete  constitudo por duas linhas,
a saber:

escreve "O valor de n  "&
escreve n

Nas verses anteriores do interpretador ScriptVox, no era permitido que um
comando REPETE, ENQUANTO ou SE fizesse parte do BLOCO de algum outro comando.
Entretanto, na verso 6.0, podemos ter construes aninhadas, como por exemplo:

repete n 5
    escreve "O valor de n  " n
	seja a 0
	enquanto a <= n
		escreve a " " &
		soma a 1
	fim enquanto
fim repete

Observe, no exemplo, que o comando ENQUANTO e seu bloco fazem parte do bloco do 
comando REPETE. Sempre que isto acontece, dizemos que os comandos esto ANINHADOS 
ou ENCAIXADOS, o mais interno no mais externo.


3.2) Tipos

At a verso 5.0, as variveis em ScriptVox eram capazes de armazenar um s tipo
de informao: cadeias de caracteres, ou "strings" em ingls. Mesmo que escrevssemos

Seja $var 5

ainda assim, o valor da varivel $var seria a cadeia unitria "5" e no o nmero inteiro 5,
como seria de se esperar. Isto implicava que, na hora de realizar uma operao
aritmtica do tipo

Soma $var 1

o contedo de $var deveria ser transformado em um nmero inteiro, para poder ser incrementado
de uma unidade. Aps a soma, o valor de $var deveria ser transformado de volta para
o tipo cadeia.

Inspirados em linguagens de tipagem dinmica, na verso 6.0, introduzimos mais trs tipos
de dados, alm das cadeias que j existiam: inteiros, listas e dicionrios. Teremos oportunidade, 
em textos futuros, de descrever melhor os tipos lista e dicionrio.


3.3) Expresses

At a verso 5.0 do ScriptVox, s havia disponveis expresses bastante rudimentares,
que normalmente nem eram utilizadas pelos usurios em seus scripts.

Primeiramente, o que  uma expresso?  De modo informal, uma expresso  uma sentena
matemtica que combina valores, efetuando operaes sobre eles. Se a expresso estiver 
correta, ela resultar em um valor. Quando escrevemos, por exemplo, a expresso

x + 1

esta sentena matemtica expressa o seguinte: o valor da varivel x somado ao inteiro 1. 
Ento, se x armazena o inteiro 5, por exemplo, a expresso resultar no valor 6, que 
corresponde ao valor de x mais 1.

Uma expresso, portanto, combina valores atravs de operaes. Formalmente,
estes valores so chamados de OPERANDOS e as operaes so expressas por smbolos,
denominados OPERADORES. Assim, na expresso

$var + 1

os OPERANDOS "$var" e 1 so somados, atravs do OPERADOR "+".

As expresses podem envolver um nmero arbitrrio de operandos e operadores. Por exemplo:

x + 5 * $var / 2

 uma expresso perfeitamente vlida, em que os operandos so: o valor da varivel "x", o nmero
inteiro 5, o valor da varivel "$var" e o nmero inteiro 2; os operadores so "+", 
"*" (multiplicao) e "/" (diviso).

Por coerncia com a matemtica, convenciona-se uma certa ordem de avaliao entre os operadores,
denominada PRECEDNCIA. Assim, multiplicaes e divises tm precedncia (isto , so efetuadas
antes) sobre somas e subtraes, de modo que a expresso anterior seria avaliada na seguinte ordem:

- primeiramente, o inteiro 5  multiplicado pelo valor da varivel $var
- o resultado desta multiplicao  dividido por 2
- o resultado desta diviso  somado com o valor de x

Insistimos: os valores das variveis "x" e de "$var" so usados, mas no se alteram durante a avaliao 
da expresso. A conhecida sequncia de comandos ScriptVox que implementaria esta expresso
seria:

Seja $expressao 5
Multiplica $expressao $var
Divide $expressao 2
Soma $expressao x

A variavel $expresso conteria, portanto, o valor final resultante da avaliao.

S que agora, na verso 6.0, no  mais necessrio escrever tanto. Uma linha de cdigo
substitui quatro linhas de comando!

Se necessrio, a precedncia pode ser alterada com a introduo de parnteses na expresso, 
exatamente como se faz na matemtica. Assim

(x + 5) * $var / 2

teria uma ordem de avaliao diferente da ordem usada na expresso anterior. Qual seria ela?

Portanto, avaliar uma expresso significa efetuar, quando possvel, as operaes indicadas 
pelos operadores sobre os valores dos operandos, produzindo um valor final, que  chamado 
valor resultante da avaliao da expresso.

Pense um pouco neste "quando possvel" que acabamos de dizer. Quando  que no seria
possvel efetuar uma operao?  Voc consegue imaginar algum exemplo? 


3.4) Atribuies

As atribuies em ScriptVox, at a verso 5.0, eram feitas atravs do comando Seja,
no qual so especificados uma varivel e uma expresso. A ideia  avaliar a expresso,
calculando seu valor final, e armazenar este valor na varivel dada.

Na verso 6.0, uma atribuio pode ser feita como nas linguagens de programao de alto nvel:
o nome da varivel aparece seguido do sinal de atribuio "dois pontos igual" (:=) e, 
aps este sinal, aparece uma expresso. Assim

Seja var 1

pode (e deve), de agora em diante, ser escrito da seguinte maneira:

var := 1

Este comando de atribuio  lido da seguinte maneira: a varivel "var" RECEBE o valor 1.

Neste exemplo, a expresso ao lado direito do sinal de atribuio  bastante simples
e consiste apenas de um nmero inteiro. Examinaremos, na prxima seo, alguns exemplos
de expresses mais complexas.

O funcionamento de um comando de atribuio  o seguinte:
- primeiramente, a expresso que aparece ao lado direito do sinal de atribuio 
  avaliada, o que resulta em um valor;
- em seguida, este valor resultante da avaliao da expresso  armazenado na varivel 
  especificada  esquerda do sinal ":=" e o valor antigo que estava armazenado na
  varivel (se havia algum)  perdido.

Quando, num script, atribumos pela primeira vez algum valor a uma varivel dizemos que
estamos INICIALIZANDO a varivel. Apesar de o verbo INICIALIZAR no existir em portugus, 
um neologismo bastante usado em computao.

Vejamos um outro exemplo, com dois comandos de atribuio seguidos:

x := 3
var := x + 1

No primeiro comando de atribuio, a varivel cujo valor ser modificado  "x" e a
expresso a ser avaliada consiste apenas do inteiro 3. Neste caso, o valor resultante
da avaliao ser o prprio inteiro 3. Aps a execuo deste comando, o valor da
varivel "x"  o inteiro 3.  Se "x" armazenava algum valor anteriormente, ele foi
perdido.

No segundo comando, a varivel que mudar de valor  "var", que aparece do lado esquerdo
do sinal :=. A expresso do lado direito 

x + 1

Como o valor atualmente armazenado em "x"  o inteiro 3, a avaliao dessa expresso consistir
em efetuar a soma

3 + 1

que resulta no inteiro 4. Este resultado da avaliao torna-se o novo valor de "var". 

Um exemplo mais interessante  o seguinte, onde a mesma varivel aparece  esquerda e  direita
do sinal de atribuio:

var := var + 1

Neste exemplo, a varivel var RECEBE o valor da varivel var (ou seja, o seu prprio valor) 
somado com 1. A construo equivalente j conhecida das verses anteriores do ScriptVox seria

Soma var 1

Normalmente, chamamos isto de INCREMENTAR o valor de "var", ou ainda, INCREMENTAR "var".

 importante pensar sobre este ltimo exemplo e perceber em que momento o valor da varivel
"var" est apenas sendo usado e em que momento ele  modificado. Recorde o que dissemos
sobre o funcionamento de uma atribuio: primeiro a expresso  direita do sinal ":="  avaliada;
s depois o valor da varivel  esquerda do sinal ":="  modificado. Ento, enquanto o
interpretador est avaliando a expresso, o valor de "var" no muda, ele  apenas usado; 
depois de avaliada, a expresso resulta em um valor, que vem a ser a soma do valor de "var" com o inteiro 1;
este valor resultante ser armazenado na prpria varivel "var", na segunda fase da atribuio. 
E o que acontece ao valor que estava em "var" e que foi usado durante a avaliao da expresso?  
Ele  perdido no momento em que o interpretador armazena em "var" o novo valor.

As variveis, portanto, no tm lembrana de seus valores antigos. 


3.5) Voltando s Expresses

 claro que nem todo operador combina com todo tipo de operando. Por exemplo, no faz muito sentido,
em princpio, multiplicar duas cadeias.

Entretanto, por economia de smbolos, muitas vezes numa linguagem um mesmo operador pode ser 
aplicado a operandos de diferentes tipos. Em vez de inventar um smbolo distinto para cada tipo,
usamos um mesmo smbolo, que passa a ter um sentido diferente. A isto chamamos SOBRECARGA de
um operador. 

Tomemos, por exemplo, o operador "+". Quando aplicado a inteiros, seu efeito  somar dois nmeros 
e o resultado produzido  tambm do tipo inteiro. Quando aplicado a duas cadeias, o efeito  outro:
ele significa CONCATENAO. Assim, as trs linhas seguintes de cdigo

string1 := "Vaca amarela"
string2 := " sujou a panela"
frase := string1 + string2

tm o efeito final de atribuir  varivel "frase" o valor resultante da expresso 
 
string1 + string2

Nesta expresso, o operador "+"  aplicado aos valores das variveis string1 e string2. 
Estas variveis armazenam, neste momento, cadeias. Logo, o "+" se traduz como concatenao e 
o valor final de "frase" ser a cadeia 

"Vaca amarela sujou a panela"

Vamos a um exemplo mais curioso. E se usarmos o operador "+" entre um inteiro e uma
cadeia, qual ser seu efeito?  Considere o exemplo:

var := 55
desejo := " cachorros me mordam"
frase := var + desejo

Aps o primeiro comando de atribuio, a varivel var armazena o inteiro 55; depois
do segundo comando, a varivel desejo armazena a cadeia " cachorros me mordam".
E o terceiro comando ir atribuir  varivel frase o resultado da expresso

var + desejo

S que, neste caso, var armazena um inteiro e desejo armazena uma
cadeia. O que significa a soma de um inteiro com uma cadeia?

Neste caso, o interpretador agir da seguinte forma: por se tratar de uma soma,
ele tentar primeiro converter os dois operandos para o tipo inteiro. Um deles j
 inteiro (55) e o outro no pode ser convertido para inteiro, pois a cadeia 
" cachorros me mordam" contm caracteres no numricos. Portanto, no far sentido
somar um inteiro com uma cadeia que no pode ser convertida para um inteiro.

A tentativa seguinte do interpretador ser encarar o operador "+" como concatenao
de cadeias. S que 55  um inteiro, no  uma cadeia. Entretanto, neste caso,  possvel
converter o inteiro 55 na cadeia "55". Portanto a expresso "var + desejo" produzir
como resultado a concatenao de "55" com " cachorros me mordam", isto , a cadeia 

"55 cachorros me mordam"

que ser atribuda  varivel frase.

Vejamos um outro exemplo:

primeiro := "33"
segundo := 20
soma := primeiro + segundo

Voc consegue deduzir o que acontecer neste caso?  Ao encarar o operador "+" como
soma, o interpretador verifica que um operando  do tipo cadeia e outro  do tipo
inteiro. A primeira tentativa , portanto, transformar a cadeia "33" 
em um inteiro. Neste caso, a converso  possvel, porque a cadeia s contm caracteres
numricos. Assim, o valor final da varivel soma ser 53, do tipo inteiro. 

Cabe, agora, uma pergunta: e se no for possvel realizar as converses de operandos?
Considere o exemplo:

nmero := 55
pessoas := "ladres"
frase := nmero - pessoas

Repare, na expresso que aparece  direita da ltima atribuio, que o operador 
"-" (subtrao). Nossa inteno , portanto, guardar na varivel frase o valor
da varivel "nmero" menos o valor da varivel "pessoas".

Pois bem. A varivel "nmero" armazena o inteiro 55. A varivel "pessoas" armazena a
cadeia "ladres". Nosso operador, agora,  de subtrao. Subtrao s faz sentido
entre inteiros e a nica converso que o interpretador tentar fazer ser transformar
o valor da varivel "pessoas" (ou seja, a cadeia "ladres") em um inteiro, o que no  possvel. 
Logo, a operao de subtrao no se realiza e a expresso, neste caso, possui o tipo INVLIDO.

Execute este exemplo no novo interpretador e veja o que acontece!

Uma ltima observao para hoje: expresses no aparecem somente em comandos de
atribuio. Elas podem aparecem em qualquer lugar de um script onde um valor  esperado.
Assim,  perfeitamente vlida a sequncia de comandos:

nome := "arquivo"
abre #1 nome + ".txt"

A varivel "nome" armazena o nome do arquivo sem a extenso. Na hora de abrir, usamos
como nome do arquivo o resultado da expresso

nome + ".txt"

que tem o efeito de concatenar a cadeia armazenada em nome e a cadeia ".txt".
Observe que, aps o comando abre, a varivel "nome" continua armazenando a mesma cadeia de antes,
pois nada foi atribudo a ela.


EXERCCIOS

Perguntas de Estudo dirigido (responda por escrito para voc mesmo):

1)  Como so formados os nomes de variveis na verso 6.0 do ScriptVox?
2)  Como so formados os nomes de rtulos na verso 6.0 do ScriptVox?
3)  Como deve ser lido um comando de atribuio?
4)  Quais so os passos envolvidos na execuo de um comando de atribuio?  
5)  Que diferena de processamento existe entre as variveis que aparecem 
    do lado direito e a varivel que aparece do lado esquerdo do sinal de atribuio?
6)  O que acontece a uma varivel que aparece tanto do lado esquerdo quanto do
    lado direito do sinal de atribuio?
7)  O que  uma expresso?
8)  O que so operadores e operandos?
9)  O que significa avaliar uma expresso?
10  O que significa converter o valor de uma varivel para um outro tipo?  D exemplos.
11) Quando  possvel converter uma cadeia para um inteiro?
12) Quando  possvel converter um inteiro para uma cadeia?
13) Qual o efeito do operador "+" quando aplicado a cadeias?
14) Qual o efeito do operador "+" quando aplicado a inteiros?
15) O que significa um operador estar SOBRECARREGADO?
16) O que significa precedncia de um operador sobre outro?  D um exemplo.
17) Para que servem os parnteses em uma expresso?
18) O que  o BLOCO de um comando SE, REPETE ou ENQUANTO?
19) O que  um neologismo?


Exerccios de Programao

Estes exerccios devem ser resolvidos com o auxlio do interpretador ScriptVox verso 6.0,
mas as respostas no devem ser enviadas ao professor.

1) O que  escrito na tela pelo script

   x := "55"
   y := "88"
   escreve x + y

2) No exemplo anterior, se acrescentarmos a atribuio

   z := x + y

   qual ser o tipo de z: inteiro ou cadeia?

   Dica: para conferir sua resposta e saber o tipo de uma varivel, use a funo TIPO, da seguinte forma:

   escreve TIPO(z)

   A funo TIPO devolve uma cadeia informando o tipo da expresso que foi dada entre parnteses
   (neste caso, uma expresso bem simples, que consiste apenas no valor da varivel "z").
   Ficou surpreso com o resultado?  Esperava que o tipo fosse outro?  Medite a respeito.

3) Escreva um s comando de atribuio que aumenta em vinte porcento o valor inteiro armazenado
   na varivel "dinheiro". O resultado,  claro, pode no ser exato, mas no tem importncia.
   Exemplo: se a varivel dinheiro contm o valor 10, aps a atribuio, ela dever conter 12. 
   Se "dinheiro" contm 22, seu valor final ser 26 (o correto, na verdade, seria 26,4; s que este 
   valor no  inteiro e o ScriptVox, mesmo j velho de guerra, ainda no lida com nmeros reais).
   
4) Um operador bastante til que foi introduzido na verso 6.0  o operador RESTO DA DIVISO,
   representado pelo smbolo de porcentagem. Assim, o comando de atribuio
   
   x := y % 5
   
   armazena em "x" o resto da diviso de "y" por 5, desde que,  claro, "y" armazene um inteiro.
   
   Sabendo que a varivel "nmero" armazena um inteiro, escreva o comando SE de uma linha que escreve "PAR"
   na tela caso o inteiro armazenado em "nmero" seja par. Se ele no for par, nada ser escrito.
   Lembre-se: expresses podem ser usadas  vontade onde antigamente s podiam aparecer valores.
   
5) Experimente a sequncia de comandos seguinte:

   y := 2
   x := y = 2
   escreve x
   
   Agora experimente esta outra sequncia (a diferena para a anterior  trocar 2 por 3 na primeira linha):

   y := 3
   x := y = 2
   escreve x

   Examine os dois valores escritos na tela e pense a respeito.
   
   O que queremos dizer com "x recebe o valor de y = 2" ?  Desejamos armazenar na varivel "x" 
   o valor resultante da expresso "y = 2". No primeiro exemplo, "y" realmente contm o valor 2 e "x", aps a atribuio, conter 1.	
   No segundo exemplo, "y" armazena o inteiro 3 e "x", aps a atribuio, armazenar 0.

   Consegue perceber a moral desta histria? Os sinais de igualdade e de desigualdades usados em testes so tambm
   OPERADORES. Se o teste for verdadeiro, o resultado ser o inteiro 1; se o teste for falso, o resultado
   ser o inteiro 0.

6) Para usar o valor de uma varivel em uma expresso, esta varivel deve ter sido, em algum ponto do
   script, inicializada. Na verso 5.0, havia uma inicializao automtica no momento em que a varivel era
   criada. Na verso 6.0, isto no acontece mais, o que obriga o programador a efetivamente atribuir valores
   iniciais s suas variveis antes de us-las. Experimente o seguinte comando 

   a := b + 1

   no ScriptVox verso 6 e observe o que acontecer.

   
6) Descanse. 


Exerccio de Avaliao (envie at meio-dia de 19 de janeiro para scriptvox@gmail.com):

Na sua experincia com as verses anteriores do ScriptVox, voc certamente produziu alguns scripts.

Escolha um script no muito pequeno, de sua autoria. Um script do qual voc se orgulhe, de estimao mesmo. 
Faa uma reviso completa nele, substituindo por atribuies e expresses todos os comandos SEJA,
SOMA, MULTIPLICA, SUBTRAI, DIVIDE e CONCATENA. 

Renomeie as variveis do seu script de estimao usando o seguinte princpio de bom senso: batizar as
variveis com nomes significativos. Assim, por exemplo, se uma varivel armazena o endereo de uma pessoa, 
ela deve se chamar "endereo" e no "x". Outro ponto: no precisa economizar caracteres nos nomes.
A legibilidade do script  o ponto mais importante neste caso.

Lembre-se tambm de usar a extenso ".PRO" no nome do script; no s deste, mas de todos daqui em diante.

Bom estudo!

Oswaldo Vernet







